package br.com.unisinos.unitunes.model.entidade;

import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Pessoa {

    private int idPessoa;
    private String primeiroNome;
    private String ultimoNome;
    private String email;
    private String senha;
    private Perfil perfil;
    private int vlrCredito;

    public Pessoa() { }

    public Pessoa(int idPessoa, String primeiroNome, String ultimoNome, String email, String senha, Perfil perfil, int vlrCredito) {
        this.idPessoa = idPessoa;
        this.primeiroNome = primeiroNome;
        this.ultimoNome = ultimoNome;
        this.email = email;
        this.senha = senha;
        this.perfil = perfil;
        this.vlrCredito = vlrCredito;
    }

    public Pessoa(String primeiroNome, String ultimoNome, String email, String senha, int vlrCredito) {
        this.primeiroNome = primeiroNome;
        this.ultimoNome = ultimoNome;
        this.email = email;
        this.senha = senha;
        this.vlrCredito = vlrCredito;
    }

    public int getIdPessoa() {
        return idPessoa;
    }

    public String getPrimeiroNome() {
        return primeiroNome;
    }

    public String getUltimoNome() {
        return ultimoNome;
    }

    public String getEmail() {
        return email;
    }

    public String getSenha() {
        return senha;
    }

    public Perfil getPerfil() {
        return perfil;
    }

    public int getVlrCredito() {
        return vlrCredito;
    }
    
    public void setIdPessoa(int idPessoa) {
        this.idPessoa = idPessoa;
    }

    public void setPrimeiroNome(String primeiroNome) {
        this.primeiroNome = primeiroNome;
    }

    public void setUltimoNome(String ultimoNome) {
        this.ultimoNome = ultimoNome;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public void setVlrCredito(int vlrCredito) {
        this.vlrCredito = vlrCredito;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Pessoa [ idPessoa = ")
               .append(idPessoa)
               .append(", primeiroNome = ")
               .append(primeiroNome)
               .append(", ultimoNome = ")
               .append(ultimoNome)
               .append(", email = ")
               .append(email)
               .append(", senha = ")
               .append(senha)
               .append(", perfil = ")
               .append(perfil)
               .append(", vlrCredito = ")
               .append(vlrCredito)
               .append(" ]");
        return builder.toString();
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + this.idPessoa;
        hash = 97 * hash + Objects.hashCode(this.primeiroNome);
        hash = 97 * hash + Objects.hashCode(this.ultimoNome);
        hash = 97 * hash + Objects.hashCode(this.email);
        hash = 97 * hash + Objects.hashCode(this.senha);
        hash = 97 * hash + this.vlrCredito;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pessoa other = (Pessoa) obj;
        if (this.idPessoa != other.idPessoa) {
            return false;
        }
        if (!Objects.equals(this.primeiroNome, other.primeiroNome)) {
            return false;
        }
        if (!Objects.equals(this.ultimoNome, other.ultimoNome)) {
            return false;
        }
        if (!Objects.equals(this.email, other.email)) {
            return false;
        }
        if (!Objects.equals(this.senha, other.senha)) {
            return false;
        }
        if (this.vlrCredito != other.vlrCredito) {
            return false;
        }
        return true;
    }

    public void depositarCredito(int vlrCredito){
        int saldoAnterior = getVlrCredito();
        int saldoCreditado = vlrCredito;
        int saldoAtual = this.vlrCredito + vlrCredito;
        this.vlrCredito = saldoAtual;

        System.out.println("Seu saldo anterior: " + saldoAnterior);
        System.out.println("Seu saldo creditado: " + saldoCreditado);
        consultarCredito();
    }
    
    public void debitarCredito(int vlrCredito){
        int saldoAnterior = getVlrCredito();
        int saldoCreditado = vlrCredito;
        int saldoAtual = this.vlrCredito - vlrCredito;
        this.vlrCredito = saldoAtual;

        System.out.println("Seu saldo anterior: " + saldoAnterior);
        System.out.println("Seu saldo creditado: " + saldoCreditado);
        consultarCredito();
    }

    public void consultarCredito(){
        System.out.println("Seu saldo atual: " + getVlrCredito());
    }

    public boolean ValidarEmail(String email){
        boolean isEmailValid = false;
        if (email != null && email.length() > 0){
                String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[a-z]{2,4}$";
                Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher(email);
                if(matcher.matches()){
                        isEmailValid = true;
                }
        }
        return isEmailValid;
    }

    public void recuperarAcesso(){ }
    
}